package week5.hotel;

/**
 * Gast, met naam en (eventuele) kamer.
 * Practicumopgave Programmeren 1
 * @author Rick Clement en Adriaan Dekker
 * @version $Revision: 1.3 $
 */
public class Gast {
    // ------------------ Instantievariabelen ----------------

    private String name;
    private Kamer kamer;

    // ------------------ Constructor ------------------------

    /**
     * Construeert <code>Gast</code> met gegeven naam, zonder kamer.
     * @param nm naam van de nieuwe <code>Gast</code>
     */
    public Gast(String nm) {
		name = nm;
    }

    // ------------------ Aanvragen --------------------------

    /**
     * Levert een tekstuele representatie van deze <code>Gast</code> op.
     */
    public String toString() {
		return "Gast " + name;
    }

    /**
     * Levert naam van deze <code>Gast</code> op.
     */
    public String getNaam() {
		return name;
    }

    /**
     * Levert huidige kamer van deze <code>Gast</code> op.
     * @return kamer van deze <code>Gast</code>;
     *         <code>null</code> indien deze <code>Gast</code> 
     *         geen kamer heeft
     */
    public Kamer getKamer() {
		return kamer;
    }

    // ------------------ Commando's --------------------------

    /**
     * Wijst een <code>Kamer</code> aan deze <code>Gast</code> toe.
     * @param k toekomstige kamer van deze <code>Gast</code>;
     * @return of 't gelukt is;
     *        indien <code>null</code> dan is naderhand 
     *        deze <code>Gast</code> kamerloos
     */
    public boolean checkin(Kamer k) {
		if (kamer == null && k.getGast() == null) {
			kamer = k;
			k.setGast(this);
			return true;
		}
		else return false;
    }

    /**
     * Schopt deze <code>Gast</code> uit z'n <code>Kamer</code>.
     * @return of 't gelukt is;
     *        indien <code>null</code> dan blijft naderhand 
     *        deze <code>Gast</code> kamerloos
     */
    public boolean checkuit() {
		if (kamer != null) {
			kamer.setGast(null);
			kamer.getKluis().deactiveer();
			kamer = null;
			return true;
		}
		else return false;
    }
}